#include <system.h>

/**
*Interface system{
*	provide{
*		command SYSTEM_init();
*		command SYSTEM_run();
*	}
*	uses{
*		signal void APP_booted();
*	}
*}
*
*component{
*	TIMER{
*		call{
*			TIMER_init();
*			TIMER_run();
*		}
*	}
*	TASK{
*		call{
*			TASK_init();
*			TASK_reg(task_t*,void(*taskrun)());
*			TASK_post();
*			TASK_run();
*		}
*	}
*/

/**
*PRIVATE
*	 Data Field
*/		task_t system_boot_task;

/********************************************************************************************/
/*                              HW/SW Interrupt Function Call                               */
/********************************************************************************************/
void SYSTEM_init() {
	// default initialization
	TIMER_init();
	TASK_init();
	
	// post booting task
	TASK_reg(&system_boot_task, APP_booted);
	TASK_post(&system_boot_task);

	// enable global interrupt
	ENABLE_GLOBAL_ISR();
}

void SYSTEM_run() {
	for(;;) {
		TIMER_run();
		TASK_run();
	}
}
/********************************************************************************************/
